package SecondeStage.MianXiangDuiXiang.AbstractClass.InnerClass;


// 外部其他类
public class LocalInnerClass {
    public static void main(String[] args) {
        Outer02 outer02 =new Outer02();
        outer02.m1();

        // 外部其他类不能访问局部内部类，因为局部内部类实际上是一个局部变量
    }
}

class Outer02{
    private int n1=100;
    private void m2(){}
    public void m1(){
        // 局部内部类是定义在外部类的局部位置，通常在方法内,因此它的作用域仅仅在定义它的方法或代码块中
        // 内部类不能添加访问修饰符，但可以用final修饰
        class Inner02{
            private int n1=200;
            // 局部内部类，本质仍然是一个类
            // 可以直接访问外部类的所有成员，包括私有的。访问方式是：直接访问
            // 原因是private修饰的成员只能在本类访问，而内部类Inner02属于类Outer02，所以可以访问
            public void f1(){
                System.out.println("n1= "+n1);
                m2();
            }

            public void f2(){
                // 如果外部类和内部类的成员重名时，默认遵循就近原则，如果想要访问外部类的成员，使用 外部类名.this.成员 去访问
                System.out.println("n1= " + n1 + "  外部类的n1= "+Outer02.this.n1);
            }
        }
        // 内部类可以继承另一个内部类，因为内部类的本质仍然是类
        class Inner03 extends Inner02{}

        // 外部类在方法中，可以创建内部类对象，然后调用方法访问成员
        Inner02 inner02 =new Inner02();
        inner02.f1();
        inner02.f2();
    }

}
